/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucuenca.paginaasos.uimanager;

import edu.ucuenca.paginaasos.controller.GenericController;
import edu.ucuenca.paginaasos.entity.Escuela;
import edu.ucuenca.paginaasos.entity.Usuario;
import edu.ucuenca.paginaasos.uimanager.util.JsfUtil;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.imageio.ImageIO;
import javax.servlet.ServletContext;
import org.apache.commons.lang3.RandomStringUtils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

/**
 *
 * @author Johnny
 */
@ManagedBean(name = "gestorEscuela")
@SessionScoped
public class GestorEscuela implements Serializable {

    /**
     * Creates a new instance of GestorEscuela
     */
    Escuela escuela;
    Usuario usuario;
    GenericController<Escuela> controladorEscuela;
    private MapModel emptyModel;
    private MapModel emptyModelPagina;
    InputStream archivo;
    String ext;
    public double longi;
    public double lat;

    public GestorEscuela() {
    }

    public static GestorEscuela getInstance() {
        ELContext context = FacesContext.getCurrentInstance().getELContext();
        ValueExpression ex = FacesContext.getCurrentInstance().getApplication().getExpressionFactory().
                createValueExpression(context, "#{gestorEscuela}", GestorEscuela.class);
        return (GestorEscuela) ex.getValue(context);
    }    
    
    private GenericController<Escuela> getControladorEscuela() {
        if (controladorEscuela == null) {
            controladorEscuela = new GenericController<Escuela>();
        }
        return controladorEscuela;
    }

    public Escuela getEscuela() {
        if (escuela == null) {
            escuela = getUsuario().getPersona().getEscuela();
        }

        return escuela;
    }

    public void cargarPuntoMapaParaPagina() {
        emptyModelPagina = new DefaultMapModel();
        emptyModelPagina.addOverlay(new Marker(new LatLng(GestorPrincipal.getInstance().getEscuela().getLatitud(), GestorPrincipal.getInstance().getEscuela().getLongitud())));
    }

    public MapModel getEmptyModelPagina() {
        if (emptyModelPagina == null) {
            cargarPuntoMapaParaPagina();
        }
        return emptyModelPagina;
    }

    public MapModel getEmptyModel() {
        if (emptyModel == null) {
            emptyModel = new DefaultMapModel();
            emptyModel.addOverlay(new Marker(new LatLng(getEscuela().getLatitud(), getEscuela().getLongitud())));
        }
        return emptyModel;
    }

    public void setEmptyModel(MapModel emptyModel) {
        this.emptyModel = emptyModel;
    }

    public void setEscuela(Escuela escuela) {
        this.escuela = escuela;
    }

    public Usuario getUsuario() {
        if (usuario == null) {
            usuario = GestorUsuario.getInstance().getUsuarioActual();
        }
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public double getLongi() {
        return longi;
    }

    public void setLongi(double longi) {
        this.longi = longi;
    }

    public double getLat() {
        return lat;
    }

    public void setLat(double lat) {
        this.lat = lat;
    }

    public InputStream getArchivo() {
        return archivo;
    }

    public void setArchivo(InputStream archivo) {
        this.archivo = archivo;
    }

    public String getExt() {
        return ext;
    }

    public void setExt(String ext) {
        this.ext = ext;
    }

    public String getImagen() {
        if (getEscuela().getImagen() != null && !getEscuela().getImagen().equals("")) {
            return getEscuela().getImagen();
        } else {
            return "/resources/images/no-image.png";
        }
    }

    public double getLatitud() {
        if (getEscuela().getLatitud() == null) {
            return -79.01163;
        } else {
            return getEscuela().getLatitud();
        }

    }

    public double getLongitud() {
        if (getEscuela().getLongitud() == null) {
            return -2.90176;
        } else {
            return getEscuela().getLongitud();
        }

    }

    public void guardar() {
        if (longi != 0) {
            getEscuela().setLongitud(longi);
            getEscuela().setLatitud(lat);
        }
        try {
            getControladorEscuela().edit(escuela);
            JsfUtil.addSuccessMessage("Datos modificados Correctamente");
            emptyModel = null;

        } catch (Exception ex) {
            Logger.getLogger(GestorEscuela.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}
